package com.cee.admin.config.mybatisplus.method;//package com.cee.gui.config.mybatisplus.method;
//
//import com.baomidou.mybatisplus.annotation.IdType;
//import com.baomidou.mybatisplus.core.injector.AbstractMethod;
//import com.baomidou.mybatisplus.core.metadata.TableInfo;
//import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
//import org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator;
//import org.apache.ibatis.executor.keygen.KeyGenerator;
//import org.apache.ibatis.executor.keygen.NoKeyGenerator;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.mapping.SqlSource;
//
///**
// * @author wsz
// * @since 2023/6/19
// */
//public class InsertIgnoreBatch extends AbstractMethod {
//    @Override
//    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
//        KeyGenerator keyGenerator = new NoKeyGenerator();
//        String sqlMethod = "insertOrIgnoreBatch";
//        final String sql = "<script>insert ignore %s %s values %s</script>";
//        final String fieldSql = prepareFieldSql(tableInfo);
//        final String valueSql = prepareValuesSqlForMysqlBatch(tableInfo);
//        final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
//        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
//        String keyProperty = null;
//        String keyColumn = null;
//        // 表包含主键处理逻辑,如果不包含主键当普通字段处理
//        if (StringUtils.isNotBlank(tableInfo.getKeyProperty())) {
//            if (tableInfo.getIdType() == IdType.AUTO) {
//                /** 自增主键 */
//                keyGenerator = new Jdbc3KeyGenerator();
//                keyProperty = tableInfo.getKeyProperty();
//                keyColumn = tableInfo.getKeyColumn();
//            } else {
//                if (null != tableInfo.getKeySequence()) {
//                    keyGenerator = TableInfoHelper.genKeyGenerator(sqlMethod, tableInfo, builderAssistant);
//                    keyProperty = tableInfo.getKeyProperty();
//                    keyColumn = tableInfo.getKeyColumn();
//                }
//            }
//        }
//        return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod, sqlSource, keyGenerator, keyProperty, keyColumn);
//    }
//
//    private String prepareFieldSql(TableInfo tableInfo) {
//        StringBuilder fieldSql = new StringBuilder();
//        fieldSql.append(tableInfo.getKeyColumn()).append(",");
//        tableInfo.getFieldList().forEach(x -> {
//            fieldSql.append(x.getColumn()).append(",");
//        });
//        fieldSql.delete(fieldSql.length() - 1, fieldSql.length());
//        fieldSql.insert(0, "(");
//        fieldSql.append(")");
//        return fieldSql.toString();
//    }
//
//    private String prepareValuesSqlForMysqlBatch(TableInfo tableInfo) {
//        final StringBuilder valueSql = new StringBuilder();
//        valueSql.append("<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" separator=\"),(\" close=\")\">");
//        valueSql.append("#{item.").append(tableInfo.getKeyProperty()).append("},");
//        tableInfo.getFieldList().forEach(x -> valueSql.append("#{item.").append(x.getProperty()).append("},"));
//        valueSql.delete(valueSql.length() - 1, valueSql.length());
//        valueSql.append("</foreach>");
//        return valueSql.toString();
//    }
//}
